package a03ooppolymorphismDemo;

//此代码用于演示多态的缺点
public class Text {
    public static void main(String[] args) {
        Animal a = new Dog();
        //编译看左边,运行看右边
        a.eat();
        //多态的缺点:不能调用子类特有方法
        //a.lookHome();
        /*报错的原因:
         * 此代码在执行的时候,也是编译看左边,运行看右边,但是左边的父类当中,
         * 并没有lookHome这个方法,所以报错*/

        //解决的方法:将其再变回子类
        //需要注意的是,在转换的时候,只能转换为原来的子类,不可以转换为其他的子类
        //否则也将会报错
        //Dog d = (Dog)a;
        //((Dog) a).lookHome();

        //使用instanceof关键字判断一个对象是什么类型的
        if(a instanceof Dog){
            Dog d = (Dog)a;
            d.lookHome();
            //此时可以调用子类特有的方法
        }else if(a instanceof Cat){
            Cat c = (Cat)a;
            c.eat();
            //此时可以调用子类特有的方法
        }else
            System.out.println("找不到该类");


    }
}

class Animal {
    public void eat() {
        System.out.println("动物在吃饭");
    }
}

class Dog extends Animal {
    @Override
    public void eat() {
        System.out.println("狗在吃骨头");
    }

    public void lookHome() {
        System.out.println("狗在看家");
    }
}

class Cat extends Animal {
    @Override
    public void eat() {
        System.out.println("猫在吃鱼");
    }

    public void catchMouse() {
        System.out.println("猫在抓老鼠");
    }
}
